CodeDeployの「トラフィックの再ルーティング」と「元のタスクセットの終了」をCLIから実行する
こんにちは、岩城です。
ECSでBlue/Greenデプロイを行っている環境でトラフィックの再ルーティング
と元のタスクセットの終了
をCLIから実行できるか確認する機会がありましたので共有します。
トラフィックの再ルーティング
トラフィックの再ルーティング
とは、Greenタスクの起動が完了した後にユーザーのトラフィックをBlueタスクから切り替えることです。
ECSタスクを更新するとCodeDeployが動いてGreenタスクが起動します。トラフィックをGreenタスクへ切り替える際、トラフィックの再ルーティングを行う必要があります。
CodeDeployのデプロイメントグループで設定すると、すぐに再ルーティングさせたり、設定した時間を経過すれば再ルーティングするといったことが可能です。
すぐに再ルーティングさせたくないし、自分の任意のタイミングで再ルーティングさせたい。だけど、マネジメントコンソールからの作業だと操作ミスするかも知れずCLIで対応したいという場合、以下で対応できます。
$ aws deploy continue-deployment \ --deployment-id "[DEPLOYMENT_ID]" \ --deployment-wait-type "READY_WAIT"
元のタスクセットの終了
元のタスクセットの終了
とは、BlueタスクからGreenタスクへの切り替わった後にBlueタスクを終了させることです。
こちらもデプロイメントグループで設定すると、元のタスクを終了させる時間をコントロールすることができ、マネジメントコンソールだけでなくCLIでも対応できます。
$ aws deploy continue-deployment \ --deployment-id "[DEPLOYMENT_ID]" \ --deployment-wait-type "TERMINATION_WAIT"
ちなみに、当初はaws deploy continue-deployment
ではなくaws ecs delete-task-set
で元のタスクを終了できないか試しました。
以下のようなエラーが出力され、CodeDeployでコントロールされているサービスであるため削除できないことを知りました。
$ aws ecs delete-task-set \ --cluster "[CLUSTER_NAME]" \ --service "[SERVICE_NAME]" \ --task-set "[TASKSET_ID]" \ --force An error occurred (InvalidParameterException) when calling the DeleteTaskSet operation: Amazon ECS does not support task set management on services where deployments are controlled by AWS CodeDeploy.
おわりに
任意のタイミングで実行したい場合、長めに期間を設定しておき、マネジメントコンソールやCLIから実行することで実現できます。
本エントリがどなかたのお役に立てれば幸いです。